解决Unraid卡IO导致CPU爆满问题 您所在的位置:网站首页 unraid 阵列卡支持 解决Unraid卡IO导致CPU爆满问题

解决Unraid卡IO导致CPU爆满问题

#解决Unraid卡IO导致CPU爆满问题| 来源: 网络整理| 查看: 265

  作者:丶Source

  本文字数 2900+,配图 22,预估阅读时间 7 ~ 9 分钟

  写在前面

  Unraid 与其他 Nas 最大的不同之一在于其特殊的阵列模式,也就是文件级别的 “RAID” 机制:

  数据盘完全独立,单独读写也可以通过阵列读写,拔出来插到其他机器也能识别

  灵活的增减硬盘设置,加盘无需 rebuild 即可继续使用,拔盘也可以做到非常低成本

  更详细的介绍,可以看我之前写过的文章:

  但同时,Unraid 这种特殊的阵列机制,也存在一些弊端,而其中最让人诟病的就是读写性能。

  接下来我以自己使用 unraid 的一些问题场景,分享一些思路以及工具,希望对大家有帮助

  本文更多针对的是无缓存盘的情况,有缓存盘的场景自行斟酌

  基础介绍及工具

  系统文件盘

  首先需要认识 Unraid 文件的一些细节区分(以下只是我自己随便取的名字,非官方,仅供参考)

类别存储介质说明系统启动盘U盘系统本体及引导文件、license、用户配置等系统文件盘建议使用 ssd 盘如容器镜像、虚拟机镜像、应用配置等等用户数据盘通常是大容量 hdd 盘电影、电视剧、照片、音乐等等

  系统启动盘与用户数据盘应该都比较好理解,那么什么是系统文件盘呢? 

  其主要就是 /mnt/user特定的目录:

目录 说明appdata用于保存 docker 容器的持久化配置、数据等isos系统安装的镜像system/docker用于保存 dockerd 相关数据,包括模板、容器镜像、日志等等system/libvirt用于保存 libvirt 一些相关数据domains用于保存 kvm 系统镜像

  这些目录保存的都是一些系统服务的元数据以及应用服务的配置文件等,可以比较明显的与电影、音乐、照片等区分开

  unBALANCE 工具

  unBALANCE 是一个为 unraid 阵列文件管理提供图形界面的插件,契合 unraid 阵列机制的多盘文件转移

  unBALANCE 可在 unraid 社区 APP 商店中搜索并安装

  安装完毕后到 PLUGINS 插件页面找到 unBALANCE 并点击图标运行

  第一次需要配置启动 unBALANCE Server,选择 Yes 后点击 APPLY

  然后就可以点击 Open Web UI 进如 unBALANCE 管理界面

  这个插件核心就是做两件事情:

  Scatter 文件打散,将指定硬盘目录下的文件打散到其他一块或多块硬盘上

  Gather 文件聚集,将多块硬盘上特定目录文件聚集到一个硬盘上

  unBALANCE 本质上是将你选择的文件/目录通过 rsync 命令同步指定的磁盘,而其方便之处在于:

  能够与 unraid 阵列的逻辑结合,支持一到多的打散,以及多到一的聚集

  支持界面化的操作,直接进度、历史查看等

  具体的使用场景下文会提到,这里暂且不展开

  独立系统文件盘

  卡 IO 导致 CPU 100% 问题

  对于大部分使用默认配置的 Unraid 玩家而言,系统文件盘与用户数据盘是合在一起的

  这种情况下,系统服务的元数据读写与应用服务的数据读写其实都在 HDD 盘上 

  而 HDD 的读写性能是有限的,某些时候就容易出现资源争用,

  导致出现卡 IO,整个系统 CPU 使用率 100%

  实际上并不是 CPU 真的这么繁忙,大部分的 CPU 使用率是被 CPU_WAIT 占用:

  也就是硬盘性能跟不上,导致 CPU 需要等待硬盘读写数据而被阻塞

  解决方式就是用一块 IO 性能更好的 ssd 盘在存储这些数据,达到以下目的:

  系统文件存在大量的小文件 IO,ssd 更强的 4k 随机读写性能更能满足这个场景

  将系统文件读写与用户数据读写隔离,能同时利用上两块盘,以获取突破单盘的读写速度

  使用 ssd 存储系统文件

  停止 Unraid 阵列,并将新增 ssd 盘加入到阵列中:

  之后启动阵列,如果你设置了启动阵列后自动启动 docker 及虚拟机,还需要先停掉:

  停止 docker 服务:Settings -> Docker -> Enable Docker 设置为 No,点击 APPLY 保存

  停止 VM 服务:Settings -> VM Manager -> Enable VMs 设置为 No,点击 APPLY 保存

  以避免操作过程中出现非预期的文件读写导致异常

  然后就可以通过 unBALANCE 的 GATHER 文件聚集功能,将系统文件目录转移到 ssd 盘上

  勾选 4 个系统文件目录:appdata、domains、isos、system

  点击 NEXT 进入第二步,然后选择 disk3 ssd 盘作为目标硬盘,这一步比较耗时

  等 PLANING 执行完毕,就可以点击 NEXT 进入最后一步,取消 dry run,然后点击 PROCEED 开始转移

  之后就会开始文件移动操作,可以看到相关的进度等等

  设置系统文件盘独占 ssd

  完成操作后,还需将系统文件目录设置为只存储在 ssd 盘上,以 system 目录为例

以 system 目录为例,在 SHARE 共享页面,选择该目录数据只存在 SSD 盘:

  Included disk(s) 选择 Disk3

  Excluded disk(s) 选择 Disk1, Disk2

  保险起见,建议把 SMB 共享也关掉:

  依次完成 system、appdata、isos、domains 这 4 个目录的调整

  也建议调整其他的用户数据目录,把 disk3 加入到 Excluded disk(s)  里面,避免用户数据保存到 ssd 上

  至此,独立系统文件盘就已经配置完毕,后续这些目录下的文件,也只会保存到 ssd 上。

  系统文件盘替换

  掉盘问题

  在完成上述调整之后,用了快一年没啥大问题,但因为用的 ssd 拆机盘比较垃圾,最近出现了两次掉盘问题

  具体问题就是:

  ssd 盘找不到了,unraid 阵列异常

  docker.img 是存放在这块盘上的,导致所有的容器都无法使用

  可以打开 unraid 的管理后台,也可以 ssh 登录,但无法执行任何与阵列相关的操作

  解决方式也很简单,直接关机重新拔插一下 ssd 盘再开机就可以识别出来,然后再启动阵列恢复

  作为系统文件盘还是非常重要的,虽然每周都有备份,但是炸一次恢复成本还是挺高。

  需要停机操作,如果刚好不在家里恢复起来比较麻烦

  如果备份出问题,所有 docker 应用的数据全部丢失,像 transmission 几千个种子没了的话就…

  把手头上新拆机的 东芝 Q 系列 pro 128G MLC 直接替换

  同步数据

  把新的 ssd 盘通过 sata 转 usb 加入阵列,再进行数据镜像同步(裸芯片好评)

  停止阵列,然后将新的 USB ssd 盘加入阵列

  启动阵列后,需要重新格式化才可使用,注意别启动 docker 及虚拟机服务

  使用 unBALANCE 转移数据列出所有文件后,针对每个文件执行 rsync 同步,在这种硬盘对拷场景下收益太低

  rsync -a /mnt/disk3/ /mnt/disk5

  直接用 rsync 做硬盘目录镜像更方便,命令如上

  替换硬盘

  同步完数据,关机换盘

  重启进入 unraid 管理后台,可以到看到阵列已经报错,这是符合预期的:

  disk3 是原来联想 ST510 ssd 已经被拔走了

  disk5 是新的东芝 ssd 盘,但因为连接方式从 USB 换成 Sata 导致标识符改变

  进入 TOOLS - New Config 重新创建一个阵列配置

  Preserve current assignments通常是选all,不过我没有校验盘缓存盘,选Data slots也行

  回到阵列页面,可以看到之前的阵列配置已经没了,4 快盘都被当作 “新” 的硬盘处理

  启动 array 之后,可看到之前设置的磁盘目录配置还是一样没有变化。比如 appdata 目录还是在存放在 disk3 这块新的 ssd 盘上,这也是符合预期的

特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有